package objetosDeJuego;
import java.util.Iterator;
import java.util.List;
import componentes.*;

public class Arena extends Obstaculo{
	
	private final int cantidadDePosiciones = 3;
	private final int factorDeCambio = 2; //Reducira la velocidad a la mitad
	
	private Posicion posicionInicio;
	private Posicion posicionFinal;
	private Posicion [] extension;
	
	public Arena(List posicionesValidaz, Posicion posicion) {
		
		this.posicionInicio = posicion;
		this.extension = new Posicion [cantidadDePosiciones];
		this.extension = longitudDeArena(posicionesValidaz);			
	}
	
	private Posicion[] longitudDeArena(List posicionesValidaz){
		boolean buscar = true;
		int contador = 0;
		extension[contador] = posicionInicio;
		posicionFinal = extension[contador];
		contador++;
		Iterator iterador = posicionesValidaz.iterator();
						
		while (iterador.hasNext() && buscar ){
			if ( posicionInicio == (Posicion)iterador.next() ){	
				buscar = false;				
				while ( iterador.hasNext() && contador < cantidadDePosiciones ){
					extension[contador] = (Posicion)iterador.next();
					posicionFinal = extension [contador];
					contador++;
				}		
			}
		}
		return extension;
	}
	
	public void bloquear (int factorDeCambio){
		Iterator iterador;
		Enemigo enemigo;
		float velocidad;
						
		if ( posicionInicio.hayEnemigos() ){
				
			List listaDeEnemigos = posicionInicio.getListaDeObjetos();
			iterador = listaDeEnemigos.iterator();
			
			while ( iterador.hasNext() ){						
				enemigo = (Enemigo) iterador.next();						
				if ( !enemigo.puedeVolar() ){						
					velocidad = enemigo.getVelocidad();
					velocidad /= factorDeCambio;
					enemigo.setVelocidad(velocidad);
				}
			}				
		}			
	}
	
	public void desbloquear (int factorDeCambio){
		Iterator iterador;
		Enemigo enemigo;
		float velocidad;		
		
		if ( posicionFinal.hayEnemigos() ){			
			List listaDeEnemigos = posicionFinal.getListaDeObjetos();
			iterador = listaDeEnemigos.iterator();
			
			while ( iterador.hasNext() ){				
				enemigo = (Enemigo) iterador.next();					
				if ( !enemigo.puedeVolar() ){	
					velocidad = enemigo.getVelocidad();
					velocidad *= this.factorDeCambio;
					enemigo.setVelocidad(velocidad);
				}
			}			
		}
	}
	
	public  int getFactorDeCambio(){
		return this.factorDeCambio;
	}
	
}
